package top.gytf.unifiedcall.common.contract;

import top.gytf.distools.lifecycle.Lifecycle;
import top.gytf.unifiedcall.model.contract.ApiContract;

import java.lang.reflect.Method;
import java.util.Collections;
import java.util.List;

/**
 * API协定读取
 * <p>通过从API Method中解析相关注解等方式，组装{@link top.gytf.unifiedcall.model.contract.ApiContract}
 */
public interface ApiContractReader extends Lifecycle {
    /**
     * 判断是否支持读取API协定
     * @param apiMethod 处理API逻辑的Java方法
     * @return 是否支持读取API协定
     */
    boolean isSupported(Method apiMethod);

    /**
     * 从方法上读取API协定
     * @param apiMethod 处理API逻辑的Java方法
     * @return 读取到的API协定，如果读取不到返回 {@link Collections#emptyList()}
     */
    List<ApiContract> read(Method apiMethod);

    @Override
    default String getName() {
        return "ApiContractReader [" + Lifecycle.super.getName() + "]";
    }
}
